package com.anmi.alfred.response.base;

import lombok.Builder;
import lombok.Data;

/**
 * 数据返回格式，从该模块返回的数据应统一使用该格式返回，如果服务化之后，可根据相应的业务具体调整该格式
 *
 * @param <T>
 */
@Data
@Builder
public class ResponseEntity<T> {

  private int code;

  private String message;

  private T data;

  private static <T> ResponseEntity<T> info(int code, String message, T data) {
    return ResponseEntity.<T>builder().code(code).message(message).data(data).build();
  }

  /**
   * 响应成功统一使用该格式返回
   *
   * @param code 0-默认为成功标志，为自定义的状态码。
   * @param message
   * @param data
   * @param <T>
   * @return
   */
  public static <T> ResponseEntity<T> success(int code, String message, T data) {
    return info(code, message, data);
  }

  /**
   * 响应失败统一使用该格式返回，简单起见，所有与上游业务校验的数据返回都使用此格式
   *
   * @param code 500-默认为失败标志，为自定义的状态码，其他的参数校验，可自己定义
   * @param message
   * @param <T>
   * @return
   */
  public static <T> ResponseEntity<T> error(int code, String message) {
    return info(code, message, null);
  }
}
